/**
 * @(#)ViewBean.as
 * @author soda.C
 * @version  1.0
 * <br>Copyright (C), 2007 soda.C
 * <br>This program is protected by copyright laws.
 * <br>Program Name:EditMap
 * @data 2008-1-10
 */
package com.asframe.astruts2.beans
{
	import com.asframe.pattern.observer.IObserver;
	import com.asframe.ref.Type;
	
	import flash.display.Sprite;

	/**
	 * xml配置文件里的view对象的数据封装类
	 */
	public class ViewBean
	{
		/** y坐标 **/
		public var x				:Number;
		/** x坐标 **/
		public var y				:Number;
		/** 唯一名称 **/
		public var name				:String;
		/** view对象的路径 **/
		public var clazz			:String;
		/** 源 **/
		public var source			:String;
		/** 界面初始化ok的事件 **/
		public var initEvent		:String;
		/** 指定的loading **/
		public var loading			:String;
		/** 是否显示 **/
		public var visible			:Boolean;
		/** 是否为单例 **/
		public var singleton		:Boolean;
		/** 是否延迟初始化 **/
		public var lazy				:Boolean;
		/** 是否自动初始化view（自动调用view的init方法） **/
		public var autoInit			:Boolean;
		/** 该显示对象的parent **/
		public var parent			:String;
		/** 代理对象数组 **/
		public var mediators		:Array;
		/** 初始化该界面需要加载的资源 **/
		public var reses			:Array;
		/** 界面的深度，具备深度时，会按照指定的深度和其他界面进行排序 **/
		public var depth			:int;
		/** 决定每次view被add进去（打开的）时候，是否读取配置文件里的配置的坐标(也就是还原刚开始的坐标) **/
		public var undoSite			:Boolean;
		/**  是否具有交换的属性，该属性可以让view有焦点时处于最顶层 **/
		public var swap				:Boolean;
		/**  是否支持tab键  **/
		public var tab				:Boolean;
		/** 是否拖动  **/
		public var drag				:Boolean;
		/** view所在的组 **/
		public var group			:String;
		/** 是否独占该组(如果独占，则同组的其他view都会被移除容器)  **/
		public var alone			:Boolean;
		/** 互斥界面，当该view出现时，这里的界面必须移除 **/
		public var mutexViews		:String;
		/** 互斥界面组 **/
		public var mutexGroups		:String;
		
		/** 当前Mediator的生成的所有观察者监听的主题，主要用于删除观察者，和observers一一对应 **/
		public var observerNotices	:Array;
		/** 当前Mediator的生成的所有观察者，主要用于删除观察者 **/
		public var observers		:Array;
		
		/** 显示对象（初始化后） **/
		public var view				:*;
		/** view的显示对象容器 **/
		public var viewContainer	:Sprite;
		public var type				:Type;
		
		public var mutexViewAry		:Array;
		public var mutexGroupAry	:Array;
		
		public function ViewBean()
		{
			//至少有个默认的组别
			group = "group";
			observerNotices = [];
			observers = [];
		}
		/**
		 * 存放一个观察者实例 
		 * @param notice
		 * @param observer
		 * 
		 */		
		public function addObserver(notice:*,observer:IObserver):void
		{
			observerNotices.push(notice);
			observers.push(observer);
		}
		
		public function toString():String
		{
			return "[com.asframe.astruts2.beans.ViewBean name:" + name + " class:" + clazz + " singloten" + singleton + "]";
		}
	}
}
